var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
    res.send('<h1>Welcome Realtime Server</h1>');
});

// 在线用户
var onlineUsers = {};
// 当前在线人数
var onlineCount = 0;

io.on('connection', function(socket) {
    console.log('a user connected');

    // 监听新用户加入
    socket.on('login', function(obj) {
        // 将新加入用户的唯一标识当作socket的名称，后面退出的时候会用到
        socket.name = obj.userid;

        // 检查在线列表，如果不在里面就加入
        if (!onlineUsers.hasOwnProperty(obj.userid)) {
            onlineUsers[obj.userid] = obj.nickname;
            // 在线人数+1
            onlineCount++;
        }

        // 向所有客户端广播用户加入
        io.emit('login', {
            onlineUsers : onlineUsers,
            onlineCount : onlineCount,
            user : obj
        });
        console.log(obj.nickname + '加入了聊天室');
    });

    // 监听用户退出
    socket.on('disconnect', function() {
        // 将退出的用户从在线列表中删除
        if (onlineUsers.hasOwnProperty(socket.name)) {
            // 退出用户的信息
            var obj = {
                userid : socket.name,
                nickname : onlineUsers[socket.name]
            };

            // 删除
            delete onlineUsers[socket.name];
            // 在线人数-1
            onlineCount--;

            // 向所有客户端广播用户退出
            io.emit('logout', {
                onlineUsers : onlineUsers,
                onlineCount : onlineCount,
                user : obj
            });
            console.log(obj.nickname + '退出了聊天室');
        }
    });

    // 监听用户发布聊天内容
    socket.on('message', function(obj) {
        // 向所有客户端广播发布的消息
        io.emit('message', obj);
        console.log(obj.nickname + '说：' + obj.content);
    });

});

http.listen(9090, function() {
    console.log('listening on *:9090');
});